home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 199_01 / ged.h < prev    next >
Text File  |  1987-12-15  |  18KB  |  579 lines

  1. /*
  2. Header:          CUG199;
  3. Title:           Header include file of ged editor DeSmet, MSC and TurboC;
  4. Last Updated:    11/29/87;
  5.  
  6. Description:    "PURPOSE: standard header file, included in all function files,
  7.                  NB. e/qed/ged does NOT require <stdio.h>)";
  8.  
  9. Keywords:        e, editor, qed, ged, DeSmet, MSDOS;
  10. Filename:        ged.h;
  11. Warnings:        must be included in all ged files
  12.  
  13. Authors:         G. Nigel Gilbert, James W. Haefner, and Mel Tearle;
  14. Compilers:       DeSmet 3.0;
  15.  
  16. References:
  17. Endref
  18. */
  19.  
  20. /*
  21. e/qed/ged screen editor
  22.  
  23. (C)   G. Nigel Gilbert, MICROLOGY, 1981 - August-December 1981
  24.       licensed for private non-profitmaking use 1983
  25.  
  26. Modified:  Aug-Dec   1984:  BDS-C 'e'(vers 4.6a) to 'qe' (J.W. Haefner)
  27.            March     1985:  BDS-C 'qe' to DeSmet-C 'qed' (J.W. Haefner)
  28.  
  29.            May       1986:  qed converted to ged         (Mel Tearle)
  30.            August    1987:  ged converted to MSC 4.0     (Mel Tearle)
  31.  
  32. File:      ged.h
  33.  
  34. */
  35.  
  36. #include  <dos.h>
  37.  
  38. #ifdef  MSC
  39. #include  <stdio.h>
  40. #include  <stdlib.h>
  41. #include  <ctype.h>
  42.  
  43. #include  <io.h>
  44. #include  <direct.h>
  45. #include  <fcntl.h>
  46. #include  <process.h>
  47.  
  48. #include  <malloc.h>
  49. #include  <string.h>
  50. #include  <sys\types.h>
  51. #include  <sys\stat.h>
  52. #include  <setjmp.h>
  53. #endif                   /* MSC */
  54.  
  55.  
  56. #ifdef  TC
  57. #include  <stdio.h>
  58. #include  <stdlib.h>
  59. #include  <ctype.h>
  60.  
  61. #include  <io.h>
  62. #include  <fcntl.h>
  63. #include  <process.h>
  64.  
  65. #include  <mem.h>
  66. #include  <string.h>
  67. #include  <sys\stat.h>
  68.  
  69. #define   _memavl  coreleft
  70. #endif                /* TC */
  71.  
  72.  
  73. /* fixes for DeSmet - MSC/TC
  74.  */
  75. #ifndef  DS
  76. #define  index         strchr
  77. #define  _os(a,b)      bdos(a,b,0)
  78. #define  creat(file)   creat(file,S_IREAD|S_IWRITE)
  79. #endif
  80.  
  81.  
  82. #define STKSPACE   1024      /* space for the stack */
  83. #define SECSIZ      128      /* file buffer definitions */
  84. #define NSECTS       16
  85. #define IOBUFSIZ ( NSECTS * SECSIZ + 6 )
  86. #define FILELEN      64      /* max length of file name */
  87.  
  88. #define JBUFSIZE   6     /* size of buffer required for longjumps */
  89. #define BUFFER    16     /* generic buffer size */
  90. #define REFORM    72     /* default line size used in reformatting paragraph */
  91. #define FLIM      80     /* max length of find/alter string */
  92. #define LLIM     255     /* max length of a line */
  93.  
  94. #define FAIL      -1
  95. #define DFAIL   0xff     /* DeSmet read fail flag for returning char */
  96. #define NULL       0
  97. #define YES        1
  98. #define NO         0
  99. #define FALSE      0
  100. #define TRUE       1
  101. #define PREV      -2
  102.  
  103. #define HELP          1    /* table assignments */
  104. #define TABLE1        2
  105. #define TABLE2        3
  106. #define WINDOW        9    /* last line of display */
  107.  
  108. #define PAGEOVERLAP   1    /* overlap between pages with UP,DOWN-PAGE */
  109. #define OFFWIDTH     32    /* horizontal scroll increment */
  110.  
  111. #define SHEIGHT      23    /* screen height */
  112. #define PATHLEN      32    /* display lenght of path */
  113. #define SWIDTH       79    /* screen width */
  114.  
  115. #define NLINES        6    /* number of lines to skip at bottom of page */
  116. #define PAGELEN      66    /* length of page, used in listfile() */
  117.  
  118. #define EMPOS         0    /* position of error message */
  119. #define WAITPOS       0    /* position of cursor when searching/reading */
  120. #define LNPOS         0    /* position of line number */
  121. #define COLPOS       10    /* position of column number */
  122. #define REPPOS       19    /* position of "Replace?" cursor */
  123.  
  124. #define CAPLK        19    /* position of capslock message */
  125. #define FNPOS        27    /* status line - position of file name */
  126. #define OVERT        64    /* position of overstrike message */
  127. #define TIMEPOS      75    /* position of current time */
  128.  
  129. #define BACKSP     0x08    /* backspace */
  130. #define ENDFILE    0x1a    /* CP/M end of text file mark */
  131. #define CTRL       0x1f    /* last control char */
  132. #define PARBIT     0x80    /* parity bit used as a flag by testkey() */
  133. #define NKEYS        32    /* number of key codes */
  134.  
  135. #define HISTLEN     100    /* history stack of commands for undoing */
  136. #define HISTINSERT    1    /* type of command on history stack */
  137. #define HISTDELETE    2
  138. #define HISTREPLACE   3
  139.  
  140. /* Internal key codes - recommended key assignments in brackets
  141.  */
  142. #define LEADIN     0     /* lead in chararacter to key codes -
  143.                             ignored, but following key code parity set */
  144. #define DOWNKEY    1     /* cursor down */
  145. #define UPKEY      2     /* cursor up */
  146. #define LEFTKEY    3     /* cursor left */
  147. #define RIGHTKEY   4     /* cursor right */
  148. #define RIGHTWKEY  5     /* cursor right one word (D) */
  149. #define LEFTWKEY   6     /* cursor left one word (S) */
  150. #define EOLKEY     7     /* cursor to end of line (E) */
  151. #define BOLKEY     8     /* cursor to beginning of line (B) */
  152. #define UPPAGE     9     /* scroll up a page (W) */
  153. #define DOWNPAGE  10     /* scroll down a page (Z) */
  154. #define BOFKEY    11     /* cursor to beginning of file (U) */
  155. #define HOMEKEY   12     /* cursor to end of file (HOME) */
  156. #define DELLEFT   13     /* delete char to left of cursor (DEL) */
  157. #define DELRIGHT  14     /* delete char under cursor (G) */
  158. #define DELLNKEY  15     /* delete cursor line (Y) */
  159. #define DELWDKEY  16     /* delete word to right of cursor (T) */
  160. #define JUMPKEY   17     /* jump to (X) */
  161. #define CRSTILL   18     /* insert newline after cursor (N) */
  162. #define QWIKKEY   19     /* quit (Q) */
  163. #define SCRLDNKEY 20     /* edit and file context (C) */
  164. #define TOPSCRKEY 21     /* find (F) */
  165. #define BOTSCRKEY 22     /* alter (A) */
  166. #define BLOCKKEY  23     /* block operations (O) */
  167. #define SCRLUPKEY 24     /* read a file (P) */
  168. #define REPKEY    25     /* repeat last find/alter (R) */
  169. #define HELPKEY   26     /* display help menu (V) */
  170. #define OOPSKEY   27     /* restore unedited line (\) */
  171. #define TAB       28     /* tab (I) */
  172. #define RETRIEVE  29     /* retrieve last name etc entered here (R) */
  173. #define CR        30     /* return (M) */
  174. #define ESCKEY    31     /* the magic escape key (ESC) */
  175.  
  176.  
  177. /* key codes + 0x80 (PARBIT) - used in scanning strings of ctrl chars
  178.  */
  179. #define LEFTKEY_P   131
  180. #define DELLEFT_P   141
  181. #define RETRIEVE_P  157
  182. #define CR_P        158
  183. #define ESCKEY_P    159
  184.  
  185. #define F1KEY       128   /* these chars are now off limits */
  186. #define F2KEY       129   /* but I doubt if it will matter much */
  187. #define F3KEY       130
  188. #define F4KEY       145
  189. #define F5KEY       132
  190. #define F6KEY       133
  191. #define F7KEY       134
  192. #define F8KEY       135
  193. #define F9KEY       136
  194. #define F10KEY      137
  195. #define INSKEY      138
  196. #define CAPSLKON    139
  197. #define CAPSLKOFF   140
  198. #define ALTKEY      146
  199. #define GREYMINUS   142
  200. #define GREYPLUS    143
  201.  
  202.  
  203. /* screen attributes */
  204.  
  205. #define BRIDIM       '|'   /* char placed in message strings to start/stop
  206.                               dim ( half-intensity ) display */
  207.  
  208. #define DIM            4
  209. #define HIGH          13
  210. #define RSFW         104
  211. #define REVS         112
  212.  
  213. #define dim()    attr = DIM
  214. #define high()   attr = HIGH
  215.  
  216.  
  217. /* dos interrupts */
  218.  
  219. #define DOSINT      0x21
  220. #define SELDSK      0x0E
  221. #define CURDSK      0x19
  222. #define LSTOUT      0x05
  223. #define SETDIR      0x3b
  224. #define GETDIR      0x47
  225.  
  226.  
  227. /* file management */
  228.  
  229. #define MAXSLOTS     255      /* virtual memory constants */
  230. #define MAXMEMSLOTS   64      /* 36 for 64k TPA (CP/M816); old = 20 */
  231. #define PAGESIZE    1024
  232. #define PAGESECTS  ( PAGESIZE/SECSIZ )
  233.  
  234. #define FREE           0
  235. #define INUSE          1
  236. #define NOTAVAIL      -1
  237. #define MAXINT     32767
  238. #define NOFILE   (MAXINT)
  239. #define ABSOLUTE       0
  240. #define UNKNOWN  (MAXINT)
  241. #define VERNO    0x30        /* get MSDOS version number */
  242.  
  243. #define debug   scr_delete(0,24);       /* 24th line */
  244.  
  245.  
  246. /* the structure of the file buffers
  247.  */
  248. struct iobuffer  {
  249.   int   _fd;
  250.   int   _nleft;
  251.   char *_nextp;
  252.   char  _buff[ NSECTS * SECSIZ ];
  253. };
  254.  
  255.  
  256. /* address of text of each line
  257.  */
  258. struct addr  {
  259.   int  page;
  260.   int  moffset;
  261. }  *tp;
  262.  
  263.  
  264. /* command history stack for undo()
  265.  */
  266. struct hi